//Este es un modulo que sera llamado desde un loader.
//Conjunto de archivos module_server (este archivo), boot_server (lanzador) y otros.
//Es el unico modulo principal, los demàs pueden incluso ser opcionales

var http = require("http"); //Requerir Modulo HTTP
var url = require("url");
var fs = require("fs");
var index;

//Debo importarlo en cada módulo para interaccion directa
//Los anteriores funcionaban mediante llamados y argumentos.
var blacklist = require("./Module_Blacklist");
var input = fs.createReadStream('bannedips.txt');

function start(route, log) {

	http.createServer(function(request, response) {
		
		var pathname = url.parse(request.url).pathname;
		var ip = request.connection.remoteAddress;
		
		console.log("Peticion recibida: GET " + pathname + " -- "+ magenta +""+ ip +""+ reset);
		route(pathname);
		
		
		//Chequear BAN
			
		blacklist.readLines(input, blacklist.func);
		//Chequear acá la variable IP con BANNED (Array de ips ofensivos)
		if (banned.indexOf(""+ip) == -1) { //No está baneado
			// AGREGAR OR || para .txt .jpg y otros para ver como funciona
			if (/.html$/.test(pathname) == true) { 
			newpathname = "./site"+ pathname;
			fs.readFile(newpathname, function (err, data) {
			if (err) {
			
		console.log(yellow + "Advertencia: Imposible responder solicitud en " + pathname + "" + reset);

		response.writeHeader(404, {"Content-Type": "text/html"});
		response.write("<html><head><title>404 - No encontrado </title></head><h3>404 - Recurso no hallado</h3></html>");
		response.end();
		console.log("Peticion respondida con codigo: " + yellow + " 404 (No hallado) " +reset);
		
		
			} else {
		index = data;
	
		response.setHeader('Content-Type', 'text/html; charset=UTF-8');
		response.write("" + index);
		response.end();
		console.log("Peticion respondida con codigo: " + blue + " 200 (Permitido) " +reset);
			}
			});
			
			} else if (/.jpg$/.test(pathname) == true || /.jpeg$/.test(pathname) == true) { 
			newpathname = "./site"+ pathname;
			fs.readFile(newpathname, function (err, data) {
			if (err) {
			
		console.log(yellow + "Advertencia: Imposible responder solicitud en " + pathname + "" + reset);
		
		response.writeHeader(404, {"Content-Type": "text/html"});
		response.write("<html><head><title>404 - No encontrado </title></head><h3>404 - Recurso no hallado</h3></html>");
		response.end();
		console.log("Peticion respondida con codigo: " + yellow + " 404 (No hallado) " +reset);
		
		
			} else {
		index = data;
		
		response.setHeader('Content-Type', 'image/jpeg'); //CAMBIAR EL CONTENT TYPE :)
		response.write(index); //Tomar la variable literalmente, sin pasarla a texto :)
		response.end();
		console.log("Peticion respondida con codigo: " + blue + " 200 (Permitido) " +reset);
			}
			});
			
			} else if (/.gif$/.test(pathname) == true) { 
			newpathname = "./site"+ pathname;
			fs.readFile(newpathname, function (err, data) {
			if (err) {
			
		console.log(yellow + "Advertencia: Imposible responder solicitud en " + pathname + "" + reset);
		
		response.writeHeader(404, {"Content-Type": "text/html"});
		response.write("<html><head><title>404 - No encontrado </title></head><h3>404 - Recurso no hallado</h3></html>");
		response.end();
		console.log("Peticion respondida con codigo: " + yellow + " 404 (No hallado) " +reset);
		
		
			} else {
		index = data;
		
		response.setHeader('Content-Type', 'image/gif'); //CAMBIAR EL CONTENT TYPE :)
		response.write(index); //Tomar la variable literalmente, sin pasarla a texto :)
		response.end();
		console.log("Peticion respondida con codigo: " + blue + " 200 (Permitido) " +reset);
			}
			});
			
			} else if (/.png$/.test(pathname) == true) { 
			newpathname = "./site"+ pathname;
			fs.readFile(newpathname, function (err, data) {
			if (err) {
			
		console.log(yellow + "Advertencia: Imposible responder solicitud en " + pathname + "" + reset);
	
		response.writeHeader(404, {"Content-Type": "text/html"});
		response.write("<html><head><title>404 - No encontrado </title></head><h3>404 - Recurso no hallado</h3></html>");
		response.end();
		console.log("Peticion respondida con codigo: " + yellow + " 404 (No hallado) " +reset);
		
		
			} else {
		index = data;
	
		response.setHeader('Content-Type', 'image/png'); //CAMBIAR EL CONTENT TYPE :)
		response.write(index); //Tomar la variable literalmente, sin pasarla a texto :)
		response.end();
		console.log("Peticion respondida con codigo: " + blue + " 200 (Permitido) " +reset);
			}
			});
			
			} else if (/.css$/.test(pathname) == true) { 
			newpathname = "./site"+ pathname;
			fs.readFile(newpathname, function (err, data) {
			if (err) {
			
		console.log(yellow + "Advertencia: Imposible responder solicitud en " + pathname + "" + reset);
		
		response.writeHeader(404, {"Content-Type": "text/html"});
		response.write("<html><head><title>404 - No encontrado </title></head><h3>404 - Recurso no hallado</h3></html>");
		response.end();
		console.log("Peticion respondida con codigo: " + yellow + " 404 (No hallado) " +reset);
		
		
			} else {
		index = data;
	
		response.setHeader('Content-Type', 'text/css'); //CAMBIAR EL CONTENT TYPE :)
		response.write("" + index); //Tomar la variable literalmente, sin pasarla a texto :)
		response.end();
		console.log("Peticion respondida con codigo: " + blue + " 200 (Permitido) " +reset);
			}
			});
			
			} else if (/.xml$/.test(pathname) == true) { 
			newpathname = "./site"+ pathname;
			fs.readFile(newpathname, function (err, data) {
			if (err) {
			
		console.log(yellow + "Advertencia: Imposible responder solicitud en " + pathname + "" + reset);

		response.writeHeader(404, {"Content-Type": "text/html"});
		response.write("<html><head><title>404 - No encontrado </title></head><h3>404 - Recurso no hallado</h3></html>");
		response.end();
		console.log("Peticion respondida con codigo: " + yellow + " 404 (No hallado) " +reset);
		
		
			} else {
		index = data;
	
		response.setHeader('Content-Type', 'text/xml; charset=UTF-8');
		response.write(index);
		response.end();
		console.log("Peticion respondida con codigo: " + blue + " 200 (Permitido) " +reset);
			}
			});
			
			} else if (/.ogg$/.test(pathname) == true) { 
			newpathname = "./site"+ pathname;
			fs.readFile(newpathname, function (err, data) {
			if (err) {
			
		console.log(yellow + "Advertencia: Imposible responder solicitud en " + pathname + "" + reset);

		response.writeHeader(404, {"Content-Type": "text/html"});
		response.write("<html><head><title>404 - No encontrado </title></head><h3>404 - Recurso no hallado</h3></html>");
		response.end();
		console.log("Peticion respondida con codigo: " + yellow + " 404 (No hallado) " +reset);
		
		
			} else {
		index = data;
	
		response.setHeader('Content-Type', 'audio/ogg; charset=UTF-8');
		response.write(index);
		response.end();
		console.log("Peticion respondida con codigo: " + blue + " 200 (Permitido) " +reset);
			}
			});
			
			} else if (/.mp3$/.test(pathname) == true) { 
			newpathname = "./site"+ pathname;
			fs.readFile(newpathname, function (err, data) {
			if (err) {
			
		console.log(yellow + "Advertencia: Imposible responder solicitud en " + pathname + "" + reset);

		response.writeHeader(404, {"Content-Type": "text/html"});
		response.write("<html><head><title>404 - No encontrado </title></head><h3>404 - Recurso no hallado</h3></html>");
		response.end();
		console.log("Peticion respondida con codigo: " + yellow + " 404 (No hallado) " +reset);
		
		
			} else {
		index = data;
	
		response.setHeader('Content-Type', 'audio/mpeg');
		response.write(index);
		response.end();
		console.log("Peticion respondida con codigo: " + blue + " 200 (Permitido) " +reset);
			}
			});
			
			} else if (/.txt$/.test(pathname) == true) { 
			newpathname = "./site"+ pathname;
			fs.readFile(newpathname, function (err, data) {
			if (err) {
			
		console.log(yellow + "Advertencia: Imposible responder solicitud en " + pathname + "" + reset);

		response.writeHeader(404, {"Content-Type": "text/html"});
		response.write("<html><head><title>404 - No encontrado </title></head><h3>404 - Recurso no hallado</h3></html>");
		response.end();
		console.log("Peticion respondida con codigo: " + yellow + " 404 (No hallado) " +reset);
		
		
			} else {
		index = data;
	
		response.setHeader('Content-Type', 'text/plain; charset=UTF-8');
		response.write("" + index);
		response.end();
		console.log("Peticion respondida con codigo: " + blue + " 200 (Permitido) " +reset);
			}
			});
			
			} else if (/.zip$/.test(pathname) == true) { 
			newpathname = "./site"+ pathname;
			fs.readFile(newpathname, function (err, data) {
			if (err) {
			
		console.log(yellow + "Advertencia: Imposible responder solicitud en " + pathname + "" + reset);

		response.writeHeader(404, {"Content-Type": "text/html"});
		response.write("<html><head><title>404 - No encontrado </title></head><h3>404 - Recurso no hallado</h3></html>");
		response.end();
		console.log("Peticion respondida con codigo: " + yellow + " 404 (No hallado) " +reset);
		
		
			} else {
		index = data;
	
		response.setHeader('Content-Type', 'application/zip');
		response.write(index);
		response.end();
		console.log("Peticion respondida con codigo: " + blue + " 200 (Permitido) " +reset);
			}
			});
			
			} else if (/.gzip$/.test(pathname) == true) { 
			newpathname = "./site"+ pathname;
			fs.readFile(newpathname, function (err, data) {
			if (err) {
			
		console.log(yellow + "Advertencia: Imposible responder solicitud en " + pathname + "" + reset);

		response.writeHeader(404, {"Content-Type": "text/html"});
		response.write("<html><head><title>404 - No encontrado </title></head><h3>404 - Recurso no hallado</h3></html>");
		response.end();
		console.log("Peticion respondida con codigo: " + yellow + " 404 (No hallado) " +reset);
		
		
			} else {
		index = data;
	
		response.setHeader('Content-Type', 'application/gzip');
		response.write(index);
		response.end();
		console.log("Peticion respondida con codigo: " + blue + " 200 (Permitido) " +reset);
			}
			});
			
			} else if (/.mp4$/.test(pathname) == true) { 
			newpathname = "./site"+ pathname;
			fs.readFile(newpathname, function (err, data) {
			if (err) {
			
		console.log(yellow + "Advertencia: Imposible responder solicitud en " + pathname + "" + reset);

		response.writeHeader(404, {"Content-Type": "text/html"});
		response.write("<html><head><title>404 - No encontrado </title></head><h3>404 - Recurso no hallado</h3></html>");
		response.end();
		console.log("Peticion respondida con codigo: " + yellow + " 404 (No hallado) " +reset);
		
		
			} else {
		index = data;
	
		response.setHeader('Content-Type', 'video/mp4');
		response.write(index);
		response.end();
		console.log("Peticion respondida con codigo: " + blue + " 200 (Permitido) " +reset);
			}
			});
			
			} else if (/.mpeg$/.test(pathname) == true || /.mpg$/.test(pathname) == true) { 
			newpathname = "./site"+ pathname;
			fs.readFile(newpathname, function (err, data) {
			if (err) {
			
		console.log(yellow + "Advertencia: Imposible responder solicitud en " + pathname + "" + reset);

		response.writeHeader(404, {"Content-Type": "text/html"});
		response.write("<html><head><title>404 - No encontrado </title></head><h3>404 - Recurso no hallado</h3></html>");
		response.end();
		console.log("Peticion respondida con codigo: " + yellow + " 404 (No hallado) " +reset);
		
		
			} else {
		index = data;
	
		response.setHeader('Content-Type', 'video/mpeg');
		response.write(index);
		response.end();
		console.log("Peticion respondida con codigo: " + blue + " 200 (Permitido) " +reset);
			}
			});
			
			} else if (/.flv$/.test(pathname) == true) { 
			newpathname = "./site"+ pathname;
			fs.readFile(newpathname, function (err, data) {
			if (err) {
			
		console.log(yellow + "Advertencia: Imposible responder solicitud en " + pathname + "" + reset);

		response.writeHeader(404, {"Content-Type": "text/html"});
		response.write("<html><head><title>404 - No encontrado </title></head><h3>404 - Recurso no hallado</h3></html>");
		response.end();
		console.log("Peticion respondida con codigo: " + yellow + " 404 (No hallado) " +reset);
		
		
			} else {
		index = data;
	
		response.setHeader('Content-Type', 'video/x-flv');
		response.write(index);
		response.end();
		console.log("Peticion respondida con codigo: " + blue + " 200 (Permitido) " +reset);
			}
			});
			
			} else if (/.wmv$/.test(pathname) == true) { 
			newpathname = "./site"+ pathname;
			fs.readFile(newpathname, function (err, data) {
			if (err) {
			
		console.log(yellow + "Advertencia: Imposible responder solicitud en " + pathname + "" + reset);

		response.writeHeader(404, {"Content-Type": "text/html"});
		response.write("<html><head><title>404 - No encontrado </title></head><h3>404 - Recurso no hallado</h3></html>");
		response.end();
		console.log("Peticion respondida con codigo: " + yellow + " 404 (No hallado) " +reset);
		
		
			} else {
		index = data;
	
		response.setHeader('Content-Type', 'video/x-ms-wmv');
		response.write(index);
		response.end();
		console.log("Peticion respondida con codigo: " + blue + " 200 (Permitido) " +reset);
			}
			});
			
			}
			
			//Terminan las pruebas
			else { // FIN DE LA POLEMICA LLAVE AQUI VA UN ELSE
		newpathname = "./site"+ pathname; //Para enjaularlo en el directorio SITE 
		fs.readFile(newpathname +"/index.html", function (err, data) {
			if (err) {
			
		console.log(yellow + "Advertencia: Imposible responder solicitud en " + pathname + "" + reset);
		
		response.writeHeader(404, {"Content-Type": "text/html"});
		response.write("<html><head><title>404 - No encontrado </title></head><h3>404 - Recurso no hallado</h3></html>");
		response.end();
		console.log("Peticion respondida con codigo: " + yellow + " 404 (No hallado) " +reset);
		
		
			} else {
		index = data;
		
		response.setHeader('Content-Type', 'text/html; charset=UTF-8');
		response.write("" + index);
		response.end();
		console.log("Peticion respondida con codigo: " + blue + " 200 (Permitido) " +reset);
			}
			});
		
		}} else {
		console.log(yellow + "Advertencia: " + magenta + "" + ip + "" + reset + " (Bloqueado) ha intentado ingresar a " + pathname + "" + reset);
		
		response.writeHeader(403, {"Content-Type": "text/html"});
		response.write("<html><head><title>403 - Restringido </title></head><h3>403 - Acceso restringido <br> Usted no tiene permisos suficientes o ha sido bloqueado.</h3></html>");
		response.end();
		console.log("Peticion respondida con codigo: " + red + " 403 (Restringido) " +reset);
		}
		
		log(pathname, ip);
	}).listen(80);

	
}
exports.start = start;